"""
配置服务接口
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, Optional

from app.services.base_service import BaseService


class IConfigService(BaseService, ABC):
    """
    配置服务接口，定义配置服务的功能
    """
    
    @abstractmethod
    def load_config(self) -> bool:
        """
        从文件加载配置
        
        @return: 是否成功加载
        """
        pass
    
    @abstractmethod
    def save_config(self) -> bool:
        """
        保存配置到文件
        
        @return: 是否成功保存
        """
        pass
    
    @abstractmethod
    def get(self, key: str, default: Any = None) -> Any:
        """
        获取配置项
        
        @param key: 配置项键名
        @param default: 默认值，如果配置项不存在则返回该值
        @return: 配置项值
        """
        pass
    
    @abstractmethod
    def set(self, key: str, value: Any) -> None:
        """
        设置配置项
        
        @param key: 配置项键名
        @param value: 配置项值
        """
        pass
    
    @abstractmethod
    def has(self, key: str) -> bool:
        """
        检查配置项是否存在
        
        @param key: 配置项键名
        @return: 是否存在
        """
        pass
    
    @abstractmethod
    def remove(self, key: str) -> bool:
        """
        移除配置项
        
        @param key: 配置项键名
        @return: 是否成功移除
        """
        pass
    
    @abstractmethod
    def get_all(self) -> Dict[str, Any]:
        """
        获取所有配置项
        
        @return: 所有配置项
        """
        pass
    
    @abstractmethod
    def reset(self) -> None:
        """
        重置配置为默认值
        """
        pass
    
    @abstractmethod
    def get_config_file_path(self) -> str:
        """
        获取配置文件路径
        
        @return: 配置文件路径
        """
        pass
    
    @abstractmethod
    def load_config_from_path(self, path: str) -> bool:
        """
        从指定路径加载配置
        
        @param path: 配置文件或目录路径
        @return: 是否成功加载
        """
        pass 